草庐IT

Java Spring MVC 模板引擎

全部标签

c++ - 使用 typedef 的模板特化

在学习Vulkan时,我在VulkanCookbook中看到了一些代码。在VulkanCookbook中,作者编写了手动导入Vulkan函数和类的代码。好吧,我一直在慢慢地将它转换为LunarG的VulkanSDK,我在64位以下的VkFence中遇到了一个问题,它将类型定义为VkFence_T*,这很好,但在32位中,它的类型定义为uint64_t,这会导致使用类似于以下代码的VkDestroyer的问题#include#includetypedefuint64_tA;typedefuint64_tB;templateclassHandler{voidDestroyObject(Tp

c++ - Constexpr 如果使用非模板类型

#includeintfoo(intx){ifconstexpr(std::is_same_v){x=std::string();}}intmain(void){return0;}此代码无法在GCC7或Clang5上编译:error:cannotconvert‘std::__cxx11::string{akastd::__cxx11::basic_string}’to‘int’inassignmentx=std::string();由于引用的行位于constexprif分支中,该分支的计算结果应为false,程序是否可以正常编译? 最佳答案

c++ - 在模板函数中可以使用已删除构造函数的 decltype

据我所知,decltype不允许使用已删除的构造函数:structno_def{no_def()=delete;};voidtest(){decltype(no_def())a{};//error:useofdeletedfunction‘no_def::no_def()’}但如果我将模板设为“测试”函数,它就会编译templatevoidtest(){decltype(no_def())a{};//OK}还有它templatevoidtest(){decltype(no_def("not","defined","constructor"))a{};//OK}谁能解释一下?

C++ 模板 - 浮点型和整型的不同特化

我正在尝试编写一个带有如下签名的函数:templateTobar(Fromin){...}这个函数需要有不同的行为取决于ifTo是float型还是积分型。(假设From是整数且都是算术)这可以使用ifconstexpr(std::is_integral::value){...}else{...}轻松实现,但是我仅限于没有ifconstexpr的C++11.实现这种特化的好方法是什么? 最佳答案 您可以将模板重载与SFINAE一起使用.例如templatetypenamestd::enable_if::value,To>::typeb

c++ - 当类是另一个模板的模板参数时,可以使用类模板参数推导吗?

我试过这样写代码:#include#include#includeusingnamespacestd::string_literals;intmain(){std::vectorv{1,2,3};std::pairp{1,"a"s};//std::vectorvp{{1,"a"s},{2,"b"s},{3,"c"s}};//ERROR}但是它在pair是vector的模板参数的行中给出了编译错误。有没有办法让类模板推导在这里工作,或者我是否需要为对指定模板参数? 最佳答案 目前不支持。来自[dcl.type.class.deduct

C++ 模板进阶

C++模板进阶一.非类型模板参数1.概念2.实例3.注意事项二.模板的特化1.引出2.函数模板的特化1.语法和使用2.建议3.类模板的特化1.全特化2.偏特化1.部分特化2.对参数进行进一步的限制4.匹配顺序三.模板的分离编译1.什么是分离编译2.模板的分离编译3.解决方法1.显式实例化(不推荐)2.分离编译放在头文件当中四.模板的总结一.非类型模板参数1.概念模板参数分为:类型形参与非类型形参类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称后面非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成常量来使用2.实例比方说

c++ - 模板类型推导失败(std::empty 作为谓词)

我有一个vector的vector,我想检查它们是否都是空的。使用标准库,我试过:#include#includeintmain(){std::vector>vv;std::all_of(std::begin(vv),std::end(vv),std::empty);}这会导致clang7.0出现以下错误:/usr/bin/../lib/gcc/x86_64-linux-gnu/6.3.0/../../../../include/c++/6.3.0/bits/stl_algo.h:508:5:note:candidatetemplateignored:couldn'tinfertemp

c++ - 实例化模板参数的参数包

我想制作一个模板,它接受一组模板并使用相同的参数包实例化它们。不幸的是,我似乎无法弄清楚如何在模板参数包中扩展参数包。如何编译?#include#includetemplatetypename...Args>structTupleTupleMaker{templateusingNewTupleTuple=typenamestd::tuple...>;};templateusingtuple1=std::tuple;templateusingtuple2=std::tuple;usingexpected=std::tuple,std::tuple>;usingactual=TupleTu

c++ - 在模板类中定义的枚举上嵌套类的部分特化

请看下面的代码:templatestructX{enumclassE{e0};templatestructY{};templatestructY{staticintf(){return0;}};};intmain(){X::Y::E::e0>::f();}VC++15.7.5生成错误消息:1>test.cpp1>some_directory\test.cpp(15):errorC2039:'f':isnotamemberof'X::Y::E::e0>'1>some_directory\test.cpp(15):note:seedeclarationof'X::Y::E::e0>'1>s

c++ - std::bind 可变参数模板和自动返回类型

遵循thisquestion中的代码,我有一个带有可变参数模板函数的std::bind。如果我尝试提供带有auto返回值的函数模​​板,gcc会拒绝该程序:#includetemplateautoinv(Args...args){autobound=std::bind(&inv_impl,args...);returnbound;}intmain(){autob=inv(1,2);}编译错误为:foo.cc:Ininstantiationof‘autoinv(Args...)[withArgs={int,int}]’:foo.cc:41:30:requiredfromherefoo.c